Skip to main content

advanced-java-interview-questions

Dưới đây là 20 câu hỏi phỏng vấn Java nâng cao kèm câu trả lời ngắn gọn:

  1. Java Memory Model (JMM) là gì?
    JMM xác định cách các thread truy cập và thao tác với bộ nhớ, đảm bảo tính nhất quán, thứ tự và visibility giữa các thread.

  2. Sự khác biệt giữa volatilesynchronized là gì?
    volatile đảm bảo tính visibility của biến giữa các thread, trong khi synchronized cung cấp cơ chế đồng bộ hoá, đảm bảo chỉ một thread truy cập vào khối mã được bảo vệ cùng lúc.

  3. Tại sao String trong Java lại được thiết kế là immutable?
    Việc String bất biến giúp an toàn trong môi trường đa luồng, cho phép chia sẻ trong String Pool và ngăn ngừa các lỗi không mong muốn khi thay đổi giá trị.

  4. Generics là gì và ý nghĩa của Type Erasure?
    Generics cho phép kiểm tra kiểu dữ liệu tại thời điểm biên dịch để tăng tính an toàn và giảm việc ép kiểu. Sau khi biên dịch, thông tin generic bị loại bỏ (type erasure) để tương thích với JVM.

  5. Reflection API trong Java có tác dụng gì?
    Reflection cho phép kiểm tra, truy cập và thao tác các thành phần (lớp, phương thức, trường) của đối tượng tại runtime, kể cả khi chúng ở chế độ private.

  6. Lambda Expressions và Functional Interfaces là gì?
    Lambda expressions cung cấp cú pháp ngắn gọn để biểu diễn hàm. Functional Interfaces là các interface có đúng một phương thức trừu tượng, phù hợp với việc sử dụng lambda.

  7. Stream API hỗ trợ những thao tác nào?
    Stream API cho phép xử lý tập hợp dữ liệu theo hướng functional với các thao tác như filter, map, reduce, giúp code ngắn gọn và dễ đọc.

  8. Optional class được sử dụng để làm gì?
    Optional là container đại diện cho giá trị có thể có hoặc không, giúp tránh NullPointerException và xử lý giá trị một cách an toàn.

  9. Sự khác biệt giữa Abstract Class và Interface (Java 8+) là gì?
    Abstract Class có thể chứa state và phương thức đã cài đặt, trong khi Interface (Java 8 trở đi) cho phép default và static methods nhưng không thể chứa state (ngoại trừ hằng số).

  10. Phân biệt giữa wait(), notify()sleep()?
    wait()notify() được sử dụng trong synchronized block để quản lý sự đồng bộ giữa các thread, còn sleep() tạm dừng thread mà không giải phóng khóa.

  11. Sự khác biệt giữa Collection thông thường và Concurrent Collection?
    Concurrent Collections (như ConcurrentHashMap) được thiết kế để an toàn khi truy cập bởi nhiều thread cùng lúc mà không cần đồng bộ hóa thủ công, giảm thiểu lock contention.

  12. Fork/Join Framework là gì?
    Fork/Join Framework cho phép chia nhỏ tác vụ thành các công việc nhỏ hơn, xử lý song song và kết hợp kết quả, tối ưu hoá hiệu năng cho các tác vụ tính toán phức tạp.

  13. CompletableFuture dùng để làm gì?
    CompletableFuture hỗ trợ lập trình bất đồng bộ, cho phép kết hợp, xử lý kết quả của nhiều tác vụ song song một cách linh hoạt và dễ quản lý.

  14. Singleton Pattern là gì và làm sao để triển khai thread-safe?
    Singleton Pattern đảm bảo chỉ tồn tại một instance của lớp. Để thread-safe, ta có thể sử dụng double-checked locking, static holder hoặc triển khai bằng enum.

  15. Factory Pattern có vai trò gì?
    Factory Pattern tạo đối tượng mà không cần biết lớp cụ thể, giúp tách biệt quá trình tạo đối tượng khỏi logic sử dụng, tăng tính mở rộng và dễ bảo trì.

  16. Deep Copy và Shallow Copy khác nhau như thế nào?
    Shallow Copy chỉ sao chép các tham chiếu đến đối tượng con, còn Deep Copy sao chép toàn bộ cấu trúc đối tượng, bao gồm các đối tượng con bên trong.

  17. Garbage Collection trong Java hoạt động như thế nào?
    Garbage Collection tự động giải phóng bộ nhớ của các đối tượng không còn được tham chiếu, sử dụng các thuật toán như mark-and-sweep, generational collection để tối ưu hiệu năng.

  18. ClassLoader là gì và vai trò của nó?
    ClassLoader chịu trách nhiệm tải các lớp vào bộ nhớ khi runtime, hỗ trợ tính năng dynamic loading và phân vùng namespace cho các lớp.

  19. Sự khác biệt giữa checked và unchecked exceptions?
    Checked exceptions được kiểm tra tại compile-time và phải xử lý hoặc khai báo, trong khi unchecked exceptions (RuntimeException) phát sinh tại runtime và không bắt buộc phải xử lý.

  20. Sự khác biệt giữa Comparable và Comparator là gì?
    Comparable được implement bởi lớp để xác định thứ tự tự nhiên của đối tượng, còn Comparator là interface bên ngoài để định nghĩa thứ tự tùy chỉnh khi cần thiết.

Hy vọng danh sách câu hỏi và câu trả lời ngắn gọn này sẽ giúp bạn chuẩn bị tốt cho các buổi phỏng vấn Java nâng cao!